use std::collections::HashMap;

pub struct KeyPairDataType
{
    pub pri_key: Vec<u8>,
    pub pub_key: Vec<u8>,
}

impl KeyPairDataType {
    pub fn new(prikey: Vec<u8>, pubkey: Vec<u8>) -> KeyPairDataType {
        KeyPairDataType
        {
            pri_key: prikey,
            pub_key: pubkey,
        }
    }
}

#[derive(Debug)]
pub struct RatchetRootKey
{
    pub key: Vec<u8>
}

#[derive(Debug)]
pub struct RatchetChainKey
{
    pub key: Vec<u8>,
    pub index: i32,
}


#[derive(Debug)]
pub struct SessionDataType {
    pub uid: i32,
    pub rootkey: RatchetRootKey,
    pub chainkey_sender: RatchetChainKey,
    pub chainkey_receiver: RatchetChainKey,
    // pub consult_msg: ConsultMessage,
    pub message_history: HashMap<i32, EncryptedMessage>,
}
///other_ik_pub -- 需要协商的对方的身份公钥
/// other_spk_pub -- 需要协商的对方的签名公钥
/// other_opk_pub -- 本次协商的一次性公钥
#[derive(Debug)]
pub struct UserPackage {
    pub uid: i32,
    pub other_ik_pub: Vec<u8>,
    pub other_spk_pub: Vec<u8>,
    pub other_opk_pub: Vec<u8>,
}

#[derive(Debug)]
pub struct TranData {
    pub type_: i32,
    pub body: Vec<u8>,
}
/// uid -- 这次协商的对方的id
/// other_ik_pub -- 对于接受方而言这个是对方的身份公钥 , 发送方而言是自己的身份公钥
/// other_epk_pub -- 对于接受方而言这个是本次协商的临时公钥, 发送方而言是自己本地临时生成的协商公钥
/// opkid --     对于接受方而言这个是本地被进行协商的发送方使用的 一次性公钥的公钥id , 用于查找 对方使用的opk
/// body --   本次协商的时候附带的加密消息
#[derive(Debug)]
pub struct ConsultMessage {
    pub uid: i32,
    pub other_ik_pub: Vec<u8>,
    pub other_epk_pub: Vec<u8>,
    pub opkid: u32,
    pub body: Vec<u8>,
}

///
/// cipher_text --  密文消息
/// epk_pub -- 本次消息的临时公钥
#[derive(Debug)]
pub struct EncryptedMessage {
    pub uid: i32,
    pub cipher_text: Vec<u8>,
    pub epk_pub: Vec<u8>,
}
